package com.zjcloud.jwgl.service;

import java.util.List;
import com.zjcloud.jwgl.domain.ScTeacherSubject;

/**
 * 教师学科关联Service接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface IScTeacherSubjectService 
{
    /**
     * 查询教师学科关联
     * 
     * @param id 教师学科关联主键
     * @return 教师学科关联
     */
    public ScTeacherSubject selectScTeacherSubjectById(Long id);

    /**
     * 查询教师学科关联列表
     * 
     * @param scTeacherSubject 教师学科关联
     * @return 教师学科关联集合
     */
    public List<ScTeacherSubject> selectScTeacherSubjectList(ScTeacherSubject scTeacherSubject);

    /**
     * 新增教师学科关联
     * 
     * @param scTeacherSubject 教师学科关联
     * @return 结果
     */
    public int insertScTeacherSubject(ScTeacherSubject scTeacherSubject);

    /**
     * 修改教师学科关联
     * 
     * @param scTeacherSubject 教师学科关联
     * @return 结果
     */
    public int updateScTeacherSubject(ScTeacherSubject scTeacherSubject);

    /**
     * 批量删除教师学科关联
     * 
     * @param ids 需要删除的教师学科关联主键集合
     * @return 结果
     */
    public int deleteScTeacherSubjectByIds(Long[] ids);

    /**
     * 删除教师学科关联信息
     * 
     * @param id 教师学科关联主键
     * @return 结果
     */
    public int deleteScTeacherSubjectById(Long id);

    /**
     * 根据教师ID查询学科关联列表
     * 
     * @param teacherId 教师ID
     * @return 学科关联列表
     */
    public List<ScTeacherSubject> selectScTeacherSubjectByTeacherId(Long teacherId);

    /**
     * 根据学科ID查询教师关联列表
     * 
     * @param subjectId 学科ID
     * @return 教师关联列表
     */
    public List<ScTeacherSubject> selectScTeacherSubjectBySubjectId(Long subjectId);

    /**
     * 根据教师ID和学科ID查询关联信息
     * 
     * @param teacherId 教师ID
     * @param subjectId 学科ID
     * @return 关联信息
     */
    public ScTeacherSubject selectScTeacherSubjectByTeacherAndSubject(Long teacherId, Long subjectId);

    /**
     * 检查教师学科关联是否存在
     * 
     * @param teacherId 教师ID
     * @param subjectId 学科ID
     * @return 结果
     */
    public boolean checkTeacherSubjectExists(Long teacherId, Long subjectId);

    /**
     * 根据教学能力等级查询教师学科关联
     * 
     * @param abilityLevel 教学能力等级
     * @return 关联列表
     */
    public List<ScTeacherSubject> selectScTeacherSubjectByAbilityLevel(String abilityLevel);

    /**
     * 根据专业匹配度查询教师学科关联
     * 
     * @param minMatch 最小匹配度
     * @param maxMatch 最大匹配度
     * @return 关联列表
     */
    public List<ScTeacherSubject> selectScTeacherSubjectByProfessionalMatch(Integer minMatch, Integer maxMatch);

    /**
     * 获取教师主教学科
     * 
     * @param teacherId 教师ID
     * @return 主教学科列表
     */
    public List<ScTeacherSubject> selectMainSubjectsByTeacherId(Long teacherId);

    /**
     * 设置主教学科
     * 
     * @param teacherId 教师ID
     * @param subjectId 学科ID
     * @return 结果
     */
    public int setMainSubject(Long teacherId, Long subjectId);

    /**
     * 取消主教学科
     * 
     * @param teacherId 教师ID
     * @param subjectId 学科ID
     * @return 结果
     */
    public int unsetMainSubject(Long teacherId, Long subjectId);

    /**
     * 更新教学质量评分
     * 
     * @param id 关联ID
     * @param qualityScore 质量评分
     * @return 结果
     */
    public int updateQualityScore(Long id, Double qualityScore);

    /**
     * 更新学生满意度
     * 
     * @param id 关联ID
     * @param satisfaction 满意度
     * @return 结果
     */
    public int updateStudentSatisfaction(Long id, Double satisfaction);

    /**
     * 批量分配教师学科
     * 
     * @param teacherId 教师ID
     * @param subjectIds 学科ID列表
     * @return 结果
     */
    public int batchAssignTeacherSubjects(Long teacherId, Long[] subjectIds);

    /**
     * 批量取消教师学科分配
     * 
     * @param teacherId 教师ID
     * @param subjectIds 学科ID列表
     * @return 结果
     */
    public int batchUnassignTeacherSubjects(Long teacherId, Long[] subjectIds);

    /**
     * 获取教师学科统计信息
     * 
     * @param teacherId 教师ID
     * @return 统计信息
     */
    public List<ScTeacherSubject> getTeacherSubjectStatistics(Long teacherId);

    /**
     * 根据年级范围查询教师学科关联
     * 
     * @param gradeRange 年级范围
     * @return 关联列表
     */
    public List<ScTeacherSubject> selectScTeacherSubjectByGradeRange(String gradeRange);
}